﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Negocio;

public partial class Administracion_frmClienteABM : System.Web.UI.Page
{
    Cliente objeto;
    EstadoABM estadoABM;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            SetModo(EstadoABM.Seleccionar);
            CargarControles();
            CargarGrilla(Cliente.ObtenerTodos());
        }
        else
        {
            if (Session["ClienteABM"] != null)
            {
                objeto = (Cliente)Session["ClienteABM"];
            }
        }
    }
    protected void butNuevo_Click(object sender, EventArgs e)
    {
        Limpiar();
        objeto = new Cliente();
        SetModo(EstadoABM.Modificar);
        txtCodigo.Focus();
        Session["ClienteABM"] = objeto;
    }
    protected void butModificar_Click(object sender, EventArgs e)
    {
        SetModo(EstadoABM.Modificar);
        txtCodigo.Enabled = false;
        txtApellido.Focus();
    }
    protected void butEliminar_Click(object sender, EventArgs e)
    {
        objeto.Borrar();
        objeto.Persistir();
        objeto = null;
        Limpiar();
        SetModo(EstadoABM.Seleccionar);
        CargarGrilla(Cliente.ObtenerTodos());
    }
    protected void butAceptar_Click(object sender, EventArgs e)
    {
        CopiarDatos();
        objeto.Persistir();
        CargarObjetoConModoVer();
        CargarGrilla(Cliente.ObtenerTodos());
    }
    protected void butCancelar_Click(object sender, EventArgs e)
    {
        if (objeto.Nuevo)
        {
            Limpiar();
            SetModo(EstadoABM.Seleccionar);
        }
        else
        {
            CargarObjetoConModoVer();
        }
    }

    #region Funciones Protected

    protected void Limpiar()
    {
        txtCodigo.Text = string.Empty;
        txtApellido.Text = string.Empty;
        txtNombre.Text = string.Empty;
        txtTelefono.Text = string.Empty;
        txtEmail.Text = string.Empty;
        txtDireccion.Text = string.Empty;
        txtBarrio.Text = string.Empty;
        txtLocalidad.Text = string.Empty;
        txtProvincia.Text = string.Empty;
        txtCuit.Text = string.Empty;
        txtIngresoBruto.Text = string.Empty;
        txtCondicionIva.Text = string.Empty;
        chkActivo.Checked = true;
        txtObservacion.Text = string.Empty;
    }

    protected void CargarObjetoConModoVer()
    {
        txtCodigo.Text = objeto.Codigo;
        txtApellido.Text = objeto.Apellido;
        txtNombre.Text = objeto.Nombre;
        txtTelefono.Text = objeto.Telefono;
        txtEmail.Text = objeto.Email;
        txtDireccion.Text = objeto.Direccion;
        txtBarrio.Text = objeto.Barrio;
        txtLocalidad.Text = objeto.Localidad;
        txtProvincia.Text = objeto.Provincia;
        txtCuit.Text = objeto.Cuit;
        txtIngresoBruto.Text = objeto.IngresoBruto;
        txtCondicionIva.Text = objeto.CondicionIva;
        chkActivo.Checked = (bool) objeto.Activo;
        txtObservacion.Text = objeto.Observacion;
        SetModo(EstadoABM.Ver);
    }

    protected void CopiarDatos()
    {
        objeto.Codigo = txtCodigo.Text;
        objeto.Apellido =txtApellido.Text;
        objeto.Nombre = txtNombre.Text;
        objeto.Telefono = txtTelefono.Text;
        objeto.Email = txtEmail.Text;
        objeto.Direccion = txtDireccion.Text;
        objeto.Barrio = txtBarrio.Text;
        objeto.Localidad = txtLocalidad.Text;
        objeto.Provincia = txtProvincia.Text;
        objeto.Cuit = txtCuit.Text;
        objeto.IngresoBruto = txtIngresoBruto.Text;
        objeto.CondicionIva = txtCondicionIva.Text;
        objeto.Activo = chkActivo.Checked;
        objeto.Observacion = txtObservacion.Text;
    }


    protected void HabilitarControles(bool enable)
    {
        txtCodigo.Enabled = enable;
        txtApellido.Enabled = enable;
        txtNombre.Enabled = enable;
        txtTelefono.Enabled = enable;
        txtEmail.Enabled = enable;
        txtDireccion.Enabled = enable;
        txtBarrio.Enabled = enable;
        txtLocalidad.Enabled = enable;
        txtProvincia.Enabled = enable;
        txtCuit.Enabled = enable;
        txtIngresoBruto.Enabled = enable;
        txtCondicionIva.Enabled = enable;
        chkActivo.Enabled = enable;
        txtObservacion.Enabled = enable;
    }


    protected void CargarControles()
    {
        Delivery hdMaster = (Delivery)this.Master;
        ((Label)hdMaster.FindControl("lblTitulo")).Text = this.Title;
    }

    protected void CargarGrilla(List<Cliente> clientes)
    {
        grvDatos.DataSource = clientes;
        string[] keys = { "Codigo" };
        grvDatos.DataKeyNames = keys;
        grvDatos.DataBind();
    }

    protected void SetModo(EstadoABM estado)
    {
        estadoABM = estado;
        switch (estado)
        {
            case EstadoABM.Seleccionar:
                //Habilitar solo Nuevo
                butAceptar.Enabled = false;
                butCancelar.Enabled = false;
                butNuevo.Enabled = true;
                butModificar.Enabled = false;
                butEliminar.Enabled = false;
                HabilitarControles(false);
                break;

            case EstadoABM.Ver:
                //Habilitar solo Nuevo, Modificar y Eliminar
                butAceptar.Enabled = false;
                butCancelar.Enabled = false;
                butNuevo.Enabled = true;
                butModificar.Enabled = true;
                butEliminar.Enabled = true;
                HabilitarControles(false);
                break;

            case EstadoABM.Modificar:
                //Habilitar solo Aceptar y Cancelar
                butAceptar.Enabled = true;
                butCancelar.Enabled = true;
                butNuevo.Enabled = false;
                butModificar.Enabled = false;
                butEliminar.Enabled = false;
                HabilitarControles(true);
                break;
            default:
                break;
        }
    }
    protected enum EstadoABM
    {
        Ver,
        Modificar,
        Seleccionar
    }
    #endregion
    protected void grvDatos_SelectedIndexChanged(object sender, EventArgs e)
    {
        objeto = Cliente.ObtenerPorCodigo(grvDatos.SelectedDataKey[0].ToString());
        CargarObjetoConModoVer();
        Session["ClienteABM"] = objeto;
    }
    protected void grvDatos_PageIndexChanged(object sender, EventArgs e)
    {

    }
    protected void grvDatos_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grvDatos.PageIndex = e.NewPageIndex;
        CargarGrilla(Cliente.ObtenerTodos());        
    }
    protected void butBuscar_Click(object sender, EventArgs e)
    {
        if (txtFiltroApellido.Text != string.Empty)
        {
            CargarGrilla(Cliente.ObtenerPorFiltro(null,txtFiltroApellido.Text,null,null));
        }
        else
        {
            CargarGrilla(Cliente.ObtenerTodos());
        }
    }    
}
